﻿using System;
using System.Collections.Generic;
using System.Windows.Forms;
using Onshi.POS.Articulos;
using Onshi.POS.Articulos.Vistas;
using Onshi.POS.Formularios.Recursos;
using Onshi.POS.Modelo.Entidades;
using Onshi.POS.Modelo.Enumeradores;

namespace Onshi.POS.Formularios.Cliente
{
    public partial class PromocionesAltaBajaModificacion : FormularioBase, IPromocionesAltaBajaModificacion
    {
        #region Constructores

        public PromocionesAltaBajaModificacion(Boolean esSeleccion)
        {
            InitializeComponent();
            btnSeleccionar.Visible = esSeleccion;
            presentador = new PromocionesAltaBajaModificacionPresentador(this);
        }

        #endregion

        #region Atributos

        private PromocionesAltaBajaModificacionPresentador presentador;
        private Int32 idPromocion;
        private EnumEstadoAltaBajaModificacionHabilitacion estadoAbm;
        private Promocion promocionSelecionada;

        #endregion

        #region Propiedades

        public Byte IdTipoFormaPago
        {
            get { return 0; }// (Byte)cboTipoFormaPagos.SelectedValue; }
        }

        public Byte IdTipoFormaPagoBusqueda
        {
            get { return 0; } //(Byte)cboTipoFormaPagoFiltro.cboTipoFormaPagos.SelectedValue; }
        }

        public DateTime FechaDesde
        {
            get { return Convert.ToDateTime(dtpFechaDesde.Text); }
        }

        public DateTime FechaDesdeBusqueda
        {
            get { return Convert.ToDateTime(dtpFechaDesdeFiltro.Text); }
        }

        public DateTime FechaHasta
        {
            get { return Convert.ToDateTime(dtpFechaHasta.Text); }
        }

        public DateTime FechaHastaBusqueda
        {
            get { return Convert.ToDateTime(dtpFechaHastaFiltro.Text); }
        }

        public bool Lunes
        {
            get { return chkLunes.Checked; }
        }

        public bool LunesBusqueda
        {
            get { return chkLunesFiltro.Checked; }
        }

        public bool Martes
        {
            get { return chkMartes.Checked; }
        }

        public bool MartesBusqueda
        {
            get { return chkMartesFiltro.Checked; }
        }

        public bool Miercoles
        {
            get { return chkMiercoles.Checked; }
        }

        public bool MiercolesBusqueda
        {
            get { return chkMiercolesFiltro.Checked; }
        }

        public bool Jueves
        {
            get { return chkJueves.Checked; }
        }

        public bool JuevesBusqueda
        {
            get { return chkJuevesFiltro.Checked; }
        }

        public bool Viernes
        {
            get { return chkViernes.Checked; }
        }

        public bool ViernesBusqueda
        {
            get { return chkViernesFiltro.Checked; }
        }

        public bool Sabado
        {
            get { return chkSabado.Checked; }
        }

        public bool SabadoBusqueda
        {
            get { return chkSabadoFiltro.Checked; }
        }

        public bool Domingo
        {
            get { return chkDomingo.Checked; }
        }

        public bool DomingoBusqueda
        {
            get { return chkDomingoFiltro.Checked; }
        }

        public Int32 Cantidad
        {
            get { return Convert.ToInt32(txtCantidad.Value); }
        }

        public TimeSpan HoraDesde
        {
            get { return TimeSpan.Parse(dtpHoraDesde.Value.ToShortTimeString()); }
        }

        public TimeSpan HoraHasta
        {
            get { return TimeSpan.Parse(dtpHoraHasta.Value.ToShortTimeString()); }
        }

        public TimeSpan HoraDesdeBusqueda
        {
            get { return TimeSpan.Parse(dtpHoraDesdeFiltro.Value.ToShortTimeString()); }
        }

        public TimeSpan HoraHastaBusqueda
        {
            get { return TimeSpan.Parse(dtpHoraHastaFiltro.Value.ToShortTimeString()); }
        }

        public decimal Descuento
        {
            get { return txtDescuento.Value; }
        }

        public string ObservacionBusqueda
        {
            get { return txtObservacionFiltro.Text.Trim(); }
        }

        public string Observacion
        {
            get { return txtObservacion.Text.Trim(); }
        }

        public Promocion PromocionSelecionada
        {
            get { return promocionSelecionada; }
            set { promocionSelecionada = value; }
        }

        public Int32 IdPromocion
        {
            get { return idPromocion; }
        }

        public string NombreBusqueda
        {
            get { return txtNombreFiltro.Text.Trim(); }
        }

        public string Nombre
        {
            get { return txtNombre.Text.Trim(); }
        }

        public EnumEstadoAltaBajaModificacionHabilitacion EstadoAbm
        {
            get { return estadoAbm; }
        }

        public List<Promocion> Lista
        {
            set { bsPromociones.DataSource = value; }
        }
        #endregion

        #region Metodos
        private void ActualizarCampos()
        {
            if (bsPromociones.Current != null)
            {
                idPromocion = ((Promocion)bsPromociones.Current).Id;
                txtNombre.Text = ((Promocion)bsPromociones.Current).Nombre;
                txtObservacion.Text = ((Promocion)bsPromociones.Current).Observacion;
                txtCantidad.Value = ((Promocion)bsPromociones.Current).Cantidad;
                txtDescuento.Value = ((Promocion)bsPromociones.Current).Descuento;
                dtpFechaDesde.Value = ((Promocion)bsPromociones.Current).FechaDesde;
                dtpFechaHasta.Value = ((Promocion)bsPromociones.Current).FechaHasta;
                chkLunes.Checked = ((Promocion)bsPromociones.Current).Lunes;
                chkMartes.Checked = ((Promocion)bsPromociones.Current).Martes;
                chkMiercoles.Checked = ((Promocion)bsPromociones.Current).Miercoles;
                chkJueves.Checked = ((Promocion)bsPromociones.Current).Jueves;
                chkViernes.Checked = ((Promocion)bsPromociones.Current).Viernes;
                chkSabado.Checked = ((Promocion)bsPromociones.Current).Sabado;
                chkDomingo.Checked = ((Promocion)bsPromociones.Current).Domingo;
                //cboTipoFormaPago.cboTipoFormaPagos.SelectedValue = ((Promocion)bsPromociones.Current).TipoFormaPago.Id;
            }
            else
                LimpiarCampos();
        }

        private void HabilitarControles()
        {
            txtNombre.Enabled = !txtNombre.Enabled;
            txtCantidad.Enabled = !txtCantidad.Enabled;
            dtpFechaDesde.Enabled = !dtpFechaDesde.Enabled;
            dtpFechaHasta.Enabled = !dtpFechaHasta.Enabled;
            dtpHoraDesde.Enabled = !dtpHoraDesde.Enabled;
            dtpHoraHasta.Enabled = !dtpHoraHasta.Enabled;
            txtDescuento.Enabled = !txtDescuento.Enabled;
            txtObservacion.Enabled = !txtObservacion.Enabled;
            cboTipoFormaPago.Enabled = !cboTipoFormaPago.Enabled;

            chkLunes.Enabled = !chkLunes.Enabled;
            chkMartes.Enabled = !chkMartes.Enabled;
            chkMiercoles.Enabled = !chkMiercoles.Enabled;
            chkJueves.Enabled = !chkJueves.Enabled;
            chkViernes.Enabled = !chkViernes.Enabled;
            chkSabado.Enabled = !chkSabado.Enabled;
            chkDomingo.Enabled = !chkDomingo.Enabled;

            btnNuevo.Enabled = !btnNuevo.Enabled;
            btnModficiar.Enabled = !btnModficiar.Enabled;
            btnEliminar.Enabled = !btnEliminar.Enabled;
            btnAceptar.Enabled = !btnAceptar.Enabled;
            btnCancelar.Enabled = !btnCancelar.Enabled;
        }

        private void LimpiarCampos()
        {
            idPromocion = 0;
            txtNombreFiltro.Text = String.Empty;
            txtObservacionFiltro.Text = String.Empty;
            txtCantidadFiltro.Value = 0;
            txtDescuentoFiltro.Value = 0;
            dtpFechaDesdeFiltro.Value = DateTime.Now;
            dtpFechaHastaFiltro.Value = DateTime.Now;
            txtObservacionFiltro.Text = String.Empty;
            //cboTipoFormaPagoFiltro.cboTipoFormaPagos.SelectedIndex = -1;
            chkLunesFiltro.CheckState = CheckState.Indeterminate;
            chkMartesFiltro.CheckState = CheckState.Indeterminate;
            chkMiercolesFiltro.CheckState = CheckState.Indeterminate;
            chkJuevesFiltro.CheckState = CheckState.Indeterminate;
            chkViernesFiltro.CheckState = CheckState.Indeterminate;
            chkSabadoFiltro.CheckState = CheckState.Indeterminate;
            chkDomingoFiltro.CheckState = CheckState.Indeterminate;
        }

        private void LimpiarFiltro()
        {
            txtNombreFiltro.Text = String.Empty;
            txtObservacionFiltro.Text = String.Empty;
            txtCantidadFiltro.Value = 0;
            txtDescuentoFiltro.Value = 0;
            dtpFechaDesdeFiltro.Value = DateTime.Now;
            dtpFechaHastaFiltro.Value = DateTime.Now;
            txtObservacionFiltro.Text = String.Empty;
            //cboTipoFormaPagoFiltro.cboTipoFormaPagos.SelectedIndex = -1;
            chkLunesFiltro.CheckState = CheckState.Indeterminate;
            chkMartesFiltro.CheckState = CheckState.Indeterminate;
            chkMiercolesFiltro.CheckState = CheckState.Indeterminate;
            chkJuevesFiltro.CheckState = CheckState.Indeterminate;
            chkViernesFiltro.CheckState = CheckState.Indeterminate;
            chkSabadoFiltro.CheckState = CheckState.Indeterminate;
            chkDomingoFiltro.CheckState = CheckState.Indeterminate;
        }
        #endregion

        #region Eventos

        private void btnCancelar_Click(object sender, EventArgs e)
        {
            LimpiarCampos();
            HabilitarControles();
            ActualizarCampos();
            errPromociones.Clear();
        }

        private void btnNuevo_Click(object sender, EventArgs e)
        {
            LimpiarCampos();
            HabilitarControles();
            txtNombre.Focus();
            estadoAbm = EnumEstadoAltaBajaModificacionHabilitacion.ALTA;
        }

        private void btnModficiar_Click(object sender, EventArgs e)
        {
            if (bsPromociones.Current != null)
            {
                HabilitarControles();
                txtNombre.Focus();
                estadoAbm = EnumEstadoAltaBajaModificacionHabilitacion.MODIFICACION;
            }
        }

        private void btnEliminar_Click(object sender, EventArgs e)
        {
            try
            {
                if (this.bsPromociones.Current != null)
                {
                    if (((Promocion)this.bsPromociones.Current).Id != (Int32)EnumRubroProveedor.RUBRO_UNICO)
                    {
                        if (MessageBox.Show("¿Esta seguro que desea eliminar la promoción seleccionada?", Properties.Settings.Default.NombreAplicacion, MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.Yes)
                        {
                            estadoAbm = EnumEstadoAltaBajaModificacionHabilitacion.BAJA;
                            presentador.Eliminar();
                            solPromociones.SelectedTab = tabLista;
                            ultimaActualizacion1.Actualizar();
                        }
                    }
                    else
                        MessageBox.Show("Esta promoción seleccionada no se puede eliminar", Properties.Settings.Default.NombreAplicacion, MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, Properties.Settings.Default.NombreAplicacion, MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void btnAceptar_Click(object sender, EventArgs e)
        {
            try
            {
                Boolean ok = true;
                errPromociones.Clear();
                if (txtNombre.Text.Trim() == String.Empty)
                {
                    ok = false;
                    errPromociones.SetError(txtNombre, Properties.Settings.Default.CompletarCampo);
                }

                if (ok == true)
                {
                    presentador.Aceptar();
                    HabilitarControles();
                    solPromociones.SelectedTab = tabLista;
                    ultimaActualizacion1.Actualizar();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, Properties.Settings.Default.NombreAplicacion, MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void btnSalir_Click(object sender, EventArgs e)
        {
            Close();
        }

        private void btnSeleccionar_Click(object sender, EventArgs e)
        {
            if (bsPromociones.Current != null)
            {
                promocionSelecionada = (Promocion)bsPromociones.Current;
                DialogResult = System.Windows.Forms.DialogResult.OK;
            }
            else
                MessageBox.Show("No hay ninguna promoción seleccionado", Properties.Settings.Default.NombreAplicacion, MessageBoxButtons.OK, MessageBoxIcon.Information);
        }

        private void grdPromociones_SelectionChanged(object sender, EventArgs e)
        {
            ActualizarCampos();
        }

        private void PromocionesAbm_Load(object sender, EventArgs e)
        {
            presentador.ActualizarGrilla();
            cboTipoFormaPago.ActualizarListado();
            //cboTipoFormaPagoFiltro.ActualizarListado();
        }

        private void txtNombreFiltro_TextChanged(object sender, EventArgs e)
        {
            presentador.Filtrar();
        }

        private void btnLimpiar_Click(object sender, EventArgs e)
        {
            LimpiarFiltro();
        }
        #endregion
       
    }
}
